package miniapp

import (
	"fmt"
	"errors"
	"wxsdk/miniapp/core"
	"encoding/json"
	"github.com/astaxie/beego"
)

type TemplateMessage struct {
	ToUser     string `json:"touser"`       // 必须, 接受者OpenID
	TemplateId string `json:"template_id"`  // 必须, 模版ID    
	Page       string `json:"page"`
	FormId     string `json:"form_id"`
	Data       struct {
		Keyword1 struct {
			Value string `json:"value"`
			Color string `json:"color"`
		} `json:"keyword1"`
		Keyword2 struct {
			Value string `json:"value"`
			Color string `json:"color"`
		} `json:"keyword2"`
		Keyword3 struct {
			Value string `json:"value"`
			Color string `json:"color"`
		} `json:"keyword3"`
		Keyword4 struct {
			Value string `json:"value"`
			Color string `json:"color"`
		} `json:"keyword4,omitempty"`
	} `json:"data"`
}

// 发送模板消息
func TemplateMsgSend(authorizerAccessToken string, msg interface{}) (int, string, error) {
	serverUrl := fmt.Sprintf("https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=%s", authorizerAccessToken)
	client := core.GetPostJSONClient()
	var rsp core.ErrorResponse
	if body, err := json.Marshal(msg); err == nil {
	    beego.Debug("TemplateMsgSend:", string(body))
	}	
	tbdata, err := client.Excute("POST", serverUrl, msg, &rsp)
    if err != nil {
		beego.Critical(err.Error())
		return -1,"", err
	}
	if rsp.ErrCode != 0 {
		beego.Critical("error:", string(tbdata))
		return rsp.ErrCode,rsp.ErrMsg,errors.New(string(tbdata)) 
	}
	return rsp.ErrCode,rsp.ErrMsg,nil
}
